]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st: Replace global grabs with input device grabs
authorJonas Dreßler <verdre@v0yd.nl>
Sun, 14 Apr 2019 16:32:37 +0000 (18:32 +0200)
committerFlorian Müllner <florian.muellner@gmail.com>
Tue, 2 Jul 2019 01:18:15 +0000 (01:18 +0000)
Global grabs are being removed from Clutter in favour of input device
grabs, so only grab the input device instead and replace priv->grabbed
with checks for priv->grab_device.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/495

src/st/st-button.c
src/st/st-scroll-bar.c

index 5a70f4e837c31af8b745f211aaed2e933fbe3e01..fb7ccd80d8d3a6984c35237eb8619cc9e52de928 100644 (file)
@@ -192,7 +192,7 @@ st_button_button_press (ClutterActor       *actor,
   if (priv->button_mask & mask)
     {
       if (priv->grabbed == 0)
-        clutter_grab_pointer (actor);
+        clutter_input_device_grab (device, actor);
 
       priv->grabbed |= mask;
       st_button_press (button, device, mask, NULL);
@@ -221,7 +221,7 @@ st_button_button_release (ClutterActor       *actor,
 
       priv->grabbed &= ~mask;
       if (priv->grabbed == 0)
-        clutter_ungrab_pointer ();
+        clutter_input_device_ungrab (device);
 
       return TRUE;
     }
@@ -787,7 +787,7 @@ st_button_fake_release (StButton *button)
   if (priv->grabbed)
     {
       priv->grabbed = 0;
-      clutter_ungrab_pointer ();
+      clutter_input_device_ungrab (priv->device);
     }
 
   priv->device = NULL;
index 64d687bd79861e6fab255b0752ca7857d626cae8..135da76cf9167c0adf80acde83d04efdd247cb1b 100644 (file)
@@ -49,10 +49,11 @@ struct _StScrollBarPrivate
 {
   StAdjustment *adjustment;
 
-  gboolean      grabbed;
   gfloat        x_origin;
   gfloat        y_origin;
 
+  ClutterInputDevice *grab_device;
+
   ClutterActor *trough;
   ClutterActor *handle;
 
@@ -601,13 +602,13 @@ static void
 stop_scrolling (StScrollBar *bar)
 {
   StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
-  if (!priv->grabbed)
+  if (!priv->grab_device)
     return;
 
   st_widget_remove_style_pseudo_class (ST_WIDGET (priv->handle), "active");
 
-  clutter_ungrab_pointer ();
-  priv->grabbed = FALSE;
+  clutter_input_device_ungrab (priv->grab_device);
+  priv->grab_device = NULL;
   g_signal_emit (bar, signals[SCROLL_STOP], 0);
 }
 
@@ -617,7 +618,7 @@ handle_motion_event_cb (ClutterActor       *trough,
                         StScrollBar        *bar)
 {
   StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
-  if (!priv->grabbed)
+  if (!priv->grab_device)
     return FALSE;
 
   move_slider (bar, event->x, event->y);
@@ -642,6 +643,7 @@ handle_button_press_event_cb (ClutterActor       *actor,
                               StScrollBar        *bar)
 {
   StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
+  ClutterInputDevice *device = clutter_event_get_device ((ClutterEvent*) event);
 
   if (event->button != 1)
     return FALSE;
@@ -659,10 +661,10 @@ handle_button_press_event_cb (ClutterActor       *actor,
   priv->x_origin += clutter_actor_get_x (priv->trough);
   priv->y_origin += clutter_actor_get_y (priv->trough);
 
-  g_assert (!priv->grabbed);
+  g_assert (!priv->grab_device);
 
-  clutter_grab_pointer (priv->handle);
-  priv->grabbed = TRUE;
+  clutter_input_device_grab (device, priv->handle);
+  priv->grab_device = device;
   g_signal_emit (bar, signals[SCROLL_START], 0);
 
   return TRUE;